# 请求 解析 保存
import queue
from queue import Queue
from threading import Thread
from urllib import parse

import crawles
import requests

q = Queue()  # 创建队列


def image_get(url, data):
    html = requests.get(url, headers=head_data, params=data)  # 对页面进行请求
    for image_json in html.json()['List']:  # 清洗数据 获取图片链接和图片名称
        sProdName = parse.unquote(image_json['sProdName'])  # 解密数据
        sProdImgNo_6 = parse.unquote(image_json['sProdImgNo_6'])
        sProdImgNo_6 = sProdImgNo_6[:-3] + '0'  # 把200换成0
        image_path = 'image/' + sProdName + '.jpg'  # 拼接路径

        q.put([image_path, sProdImgNo_6])  # 传入到队列中

def image_save():
    while True:  # 让每一个线程可以一直存活
        print(f'目前队列{q.qsize()}')
        try:  # timeout 如果5秒没有数据就报错
            image_path, sProdImgNo_6 = q.get(timeout=5)
        except queue.Empty:
            break  # 获取报错 结束数据获取

        image_data = requests.get(sProdImgNo_6)  # 请求图片数据

        f = open(image_path, 'wb')  # 把数据保存到文件中
        f.write(image_data.content)
        f.close()


for i in range(10):  # 消费者 10 线程进行数据存储
    Thread(target=image_save).start()  # 启动线程

for page_index in range(5):
    url = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi'
    head_data = {
        # 字典，需要有一个键值对
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'}

    data = f'''
    activityId: 2735
    sVerifyCode: ABCD
    sDataType: JSON
    iListNum: 20
    totalpage: 0
    page: {page_index}
    iOrder: 0
    iSortNumClose: 1
    iAMSActivityId: 51991
    _everyRead: true
    iTypeId: 2
    iFlowId: 267733
    iActId: 2735
    iModuleId: 2735
    _: 1676035285467
    '''
    data = crawles.head_format(data)
    Thread(target=image_get, args=(url, data)).start()  # 把url和data传入到函数中

# 如果队列里面没有数据 就是生产者的问题 检查线程 请求 数据的解析
# 如果队列里面是满的数据，没有被消浩 消费者的问题 ，检查为什么没有保存
